fn main() {
    let vec1 = vec![1, 2, 3];
    let vec2 = vec![4, 5, 6];

    let array1 = [1, 2, 3];
    let array2 = [4, 5, 6];

    // `any` 方法会把迭代器**元素**一个个的传给闭包。
    // `find` 方法会把迭代器**元素的引用**传给闭包。

    // 对 `iter()` 举出 `&i32` 类型。
    let mut vec1_iter = vec1.iter();
    // 对 `into_iter()` 举出 `i32` 类型。
    let mut vec2_into_iter = vec2.into_iter();

    // #1. `any` 方法
    // `any` 方法会把迭代器**元素**一个个的传给闭包。
    // iter()->&i32，闭包接收 `&i32` 类型；
    // into_iter()->i32，闭包接收 `i32` 类型，无需解构。
    println!("#1. `.any()`");
    // 遍历 vec
    println!("2 in vec1: {}", vec1_iter.any(|&x| x == 2));
    println!("2 in vec2: {}", vec2_into_iter.any(|x| x == 2));
    // 遍历数组
    println!("2 in array1: {}", array1.iter().any(|&x| x == 2));
    println!("2 in array2: {}", array2.into_iter().any(|x| x == 2));

    // #2. `find` 方法
    // `find` 方法会把迭代器**元素的引用**传给闭包。
    // iter()->&i32，闭包接收 `&&i32` 类型；
    // into_iter()->i32，闭包接收 `&i32` 类型，无需解构。
    println!("#2. `.find()`");
    // 遍历 vec
    println!("Find 2 in vec1: {:?}", vec1_iter.find(|&&x| x == 2));
    println!("Find 2 in vec2: {:?}", vec2_into_iter.find(|&x| x == 2));
    // 遍历数组
    println!("Find 2 in array1: {:?}", array1.iter().find(|&&x| x == 2));
    println!("Find 2 in array2: {:?}", array2.into_iter().find(|&x| x == 2));
}
